
///////////////////////////////////////////////////////////////////////////////
//
//  Copyright (c) 2009, Perry L Miller IV
//  All rights reserved.
//  BSD License: http://www.opensource.org/licenses/bsd-license.html
//
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
//
//  Functor that returns a value.
//
///////////////////////////////////////////////////////////////////////////////

#ifndef _USUL_ADAPTERS_VALUE_H_
#define _USUL_ADAPTERS_VALUE_H_


namespace Usul {
namespace Adapters {


///////////////////////////////////////////////////////////////////////////////
//
//  A functor that returns the internal value.
//
///////////////////////////////////////////////////////////////////////////////

template < class T > struct Value
{
  typedef T result_type;
  Value ( T t ) : _t ( t ){}
  Value ( const Value &t ) : _t ( t._t ){}
  T operator () ()
  {
    return _t;
  }
private:
  Value &operator = ( const Value & );
  T _t;
};


///////////////////////////////////////////////////////////////////////////////
//
//  Make functor.
//
///////////////////////////////////////////////////////////////////////////////

template < class T > inline Value < T > value ( T t )
{
  return Value < T > ( t );
}


} // namespace Adapters
} // namespace Usul


#endif // _USUL_ADAPTERS_VALUE_H_
